#pragma once

#include "IDependencyBinding.h"
#include <typeinfo>


using namespace std;

template <class Source>
class DependencyBinding : public IDependencyBinding
{
public:
	DependencyBinding();

	template <class Interface>
	DependencyBinding<Source>* With();

	template <class Implementation>
	DependencyBinding<Source>* As();

	~DependencyBinding();

};

template <class Source>
DependencyBinding<Source>::DependencyBinding()
{
}

template <class Source>
template <class Implementation>
DependencyBinding<Source>* DependencyBinding<Source>::With()
{
	this->implementation = &typeid(Implementation);
	return this;
}

template <class Source>
template <class Interface>
DependencyBinding<Source>* DependencyBinding<Source>::As()
{
	this->interface = &typeid(Interface);
	return this;
}
